// 题目描述：
// 给你一个整数数组 nums ，判断这个数组中是否存在长度为 3 的递增子序列。

// 如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ，使得 nums[i] < nums[j] < nums[k] ，返回 true ；否则，返回 false 。



// 示例 1：

// 输入：nums = [1,2,3,4,5]
// 输出：true
// 解释：任何 i < j < k 的三元组都满足题意
// 示例 2：

// 输入：nums = [5,4,3,2,1]
// 输出：false
// 解释：不存在满足题意的三元组
// 示例 3：

// 输入：nums = [2,1,5,0,4,6]
// 输出：true
// 解释：三元组 (3, 4, 5) 满足题意，因为 nums[3] == 0 < nums[4] == 4 < nums[5] == 6

// 自己的答案（时间复杂度过高）：
/**
 * @param {number[]} nums
 * @return {boolean}
 */
var increasingTriplet = function (nums) {
    for (let i = 0; i < nums.length; i++) {
        if (i === nums.length - 2) {
            return false
        }
        for (let j = i + 1; j < nums.length; j++) {
            if (nums[i] < nums[j]) {
                for (let k = j + 1; k < nums.length; k++) {
                    if (nums[j] < nums[k]) {
                        console.log(nums[i], nums[j], nums[k])
                        return true
                    }
                }
            }
        }
    }
    return false
};

// Gpt答案：
/**  
 * @param {number[]} nums  
 * @return {boolean}  
 */
var increasingTriplet = function (nums) {
    let small = Infinity;
    let big = Infinity;

    for (let num of nums) {
        console.log(small, big)
        if (num <= small) {
            small = num; // 更新最小的数  
        } else if (num <= big) {
            big = num; // 更新次小的数（且大于最小的数）  
        } else {
            // 如果当前数大于次小的数，则找到了递增的三元组  
            return true;
        }
    }

    return false; // 没有找到递增的三元组  
};

// 官方答案：
/**
 * @param {number[]} nums
 * @return {boolean}
 */
var increasingTriplet = function(nums) {
    let small = Number.MAX_SAFE_INTEGER, mid = Number.MAX_SAFE_INTEGER
    for(const num of nums)
        if(num <= small)
            small = num
        else if(num <= mid)
            mid = num
        else
            return true
    return false
};